package com.luzhikun.test1;

import com.luzhikun.domain.City;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import java.util.List;

/**
 * @Author Rookie Coder
 * @Description
 * @Date
 **/
public class Test1 {
    public static void main(String[] args) {
        // 配置文件地址
        String resource = "mybatis-config.xml";
        // 创建输入流
        InputStream inputStream = null;
        try {
            // 通过加载Mybatis配置文件mybatis-config.xml.创建输入流对象
            inputStream = Resources.getResourceAsStream(resource);
            /*
                sqlSessionFactoryBuilder(): sqlSessionFactory的创建者
                通过该建造者对象调用建造方法，为我们创建了一个sqlSessionFactory对象
                sqlSessionFactory对象唯一的作用就是为我们创建sqlSession对象
            */
            SqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(inputStream);
            // 我们未来所有的操作使用的都是sqlSession对象
            // 例如增删改查，处理事务等等，都是统一使用session对象来完成
            SqlSession  session =sqlSessionFactory.openSession();

            /*
                需求：根据id查城市

                    如果取得的是单条记录，我们调用selectOne方法
                    参数1：根据命名空间.sqlId形式找到我们需要使用的sql语句
                    参数2：我们要为sql语句传递的参数
             */
           City city=session.selectOne("test1.getById","1");
            System.out.println(city);


            /*
                需求：查询所有的城市

             */
            List<City> objects = session.selectList("test1.selectAll");
            Iterator<City> iterator = objects.iterator();
            while (iterator.hasNext()){
                City next = iterator.next();
                System.out.println(next);
            }

             City city1=new City(13,"南景",3);
             int id=session.insert("test1.addCity", city1);
             session.commit();
             System.out.println(id);

            /*
             修改操作
            */
            City city2=new City();
            city.setId(3);
            city2.setName("宁夏");
            city2.setProvinceId(2);
            session.update("test1.updateCity",city2);
            session.commit();

            /*
             删除操作
             */

            session.delete("test1.delete",2);
            session.commit();
            session.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
